}
});
+ St.set_slow_down_factor = function(factor) {
+ let { stack } = new Error();
+ log(`St.set_slow_down_factor() is deprecated, use St.Settings.slow_down_factor\n${stack}`);
+ St.Settings.get().slow_down_factor = factor;
+ };
+
let origToString = Object.prototype.toString;
Object.prototype.toString = function() {
let base = origToString.call(this);
if (slowdownEnv) {
let factor = parseFloat(slowdownEnv);
if (!isNaN(factor) && factor > 0.0)
- St.set_slow_down_factor(factor);
+ St.Settings.get().slow_down_factor = factor;
}
// OK, now things are initialized enough that we can import shell JS
if (this._completionActor.visible) {
this._completionActor.height = naturalHeight;
} else {
+ let settings = St.Settings.get();
this._completionActor.show();
Tweener.removeTweens(this._completionActor);
- Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / St.get_slow_down_factor(),
+ Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / settings.slow_down_factor,
transition: 'easeOutQuad',
height: naturalHeight,
opacity: 255
_hideCompletions() {
if (this._completionActor) {
+ let settings = St.Settings.get();
Tweener.removeTweens(this._completionActor);
- Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / St.get_slow_down_factor(),
+ Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION / settings.slow_down_factor,
transition: 'easeOutQuad',
height: 0,
opacity: 0,
// We inverse compensate for the slow-down so you can change the factor
// through LookingGlass without long waits.
- Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
+ let settings = St.Settings.get();
+ Tweener.addTween(this.actor, { time: 0.5 / settings.slow_down_factor,
transition: 'easeOutQuad',
y: this._targetY
});
Main.popModal(this._entry);
- Tweener.addTween(this.actor, { time: Math.min(0.5 / St.get_slow_down_factor(), 0.5),
+ let settings = St.Settings.get();
+ Tweener.addTween(this.actor, { time: Math.min(0.5 / settings.slow_down_factor, 0.5),
transition: 'easeOutQuad',
y: this._hiddenY,
onComplete: () => {
}
start() {
- if (St.get_slow_down_factor() > 0)
- Tweener.setTimeScale(1 / St.get_slow_down_factor());
+ let settings = St.Settings.get();
+ if (settings.slow_down_factor > 0)
+ Tweener.setTimeScale(1 / settings.slow_down_factor);
this._timeline.start();
global.begin_work();
}
#include "st-enum-types.h"
#include "st-private.h"
#include "st-button.h"
+#include "st-settings.h"
#define PAGING_INITIAL_REPEAT_TIMEOUT 500
#define PAGING_SUBSEQUENT_REPEAT_TIMEOUT 200
static guint signals[LAST_SIGNAL] = { 0, };
-extern gfloat st_slow_down_factor;
-
static gboolean
handle_button_press_event_cb (ClutterActor *actor,
ClutterButtonEvent *event,
trough_paging_cb (StScrollBar *self)
{
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
+ StSettings *settings;
gfloat handle_pos, event_pos, tx, ty;
gdouble value, new_value;
gdouble page_increment;
+ gdouble slow_down_factor;
gboolean ret;
gulong mode;
clutter_timeline_stop (CLUTTER_TIMELINE (priv->paging_animation));
}
+ settings = st_settings_get ();
+ g_object_get (settings, "slow-down-factor", &slow_down_factor, NULL);
+
/* FIXME: Creating a new transition for each scroll is probably not the best
* idea, but it's a lot less involved than extending the current animation */
priv->paging_animation = g_object_new (CLUTTER_TYPE_PROPERTY_TRANSITION,
"animatable", priv->adjustment,
"property-name", "value",
"interval", clutter_interval_new (G_TYPE_DOUBLE, value, new_value),
- "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
+ "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * slow_down_factor),
"progress-mode", mode,
NULL);
g_signal_connect (priv->paging_animation, "stopped",
#include "config.h"
#endif
+#include <math.h>
#include <gio/gio.h>
#include "st-private.h"
PROP_GTK_THEME,
PROP_GTK_ICON_THEME,
PROP_MAGNIFIER_ACTIVE,
+ PROP_SLOW_DOWN_FACTOR,
N_PROPS
};
gboolean primary_paste;
gboolean magnifier_active;
gint drag_threshold;
+ double slow_down_factor;
};
G_DEFINE_TYPE (StSettings, st_settings, G_TYPE_OBJECT)
+#define EPSILON (1e-10)
+
+static void
+st_settings_set_slow_down_factor (StSettings *settings,
+ double factor)
+{
+ if (fabs (settings->slow_down_factor - factor) < EPSILON)
+ return;
+
+ settings->slow_down_factor = factor;
+ g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_SLOW_DOWN_FACTOR]);
+}
+
static void
st_settings_finalize (GObject *object)
{
const GValue *value,
GParamSpec *pspec)
{
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ StSettings *settings = ST_SETTINGS (object);
+
+ switch (prop_id)
+ {
+ case PROP_SLOW_DOWN_FACTOR:
+ st_settings_set_slow_down_factor (settings, g_value_get_double (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
static void
case PROP_MAGNIFIER_ACTIVE:
g_value_set_boolean (value, settings->magnifier_active);
break;
+ case PROP_SLOW_DOWN_FACTOR:
+ g_value_set_double (value, settings->slow_down_factor);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
"Weather the a11y magnifier is active",
FALSE,
ST_PARAM_READABLE);
+ props[PROP_SLOW_DOWN_FACTOR] = g_param_spec_double("slow-down-factor",
+ "Slow down factor",
+ "Factor applied to all animation durations",
+ EPSILON, G_MAXDOUBLE, 1.0,
+ ST_PARAM_READWRITE);
g_object_class_install_properties (object_class, N_PROPS, props);
}
KEY_DRAG_THRESHOLD);
settings->magnifier_active = g_settings_get_boolean (settings->a11y_settings,
KEY_MAGNIFIER_ACTIVE);
+ settings->slow_down_factor = 1.;
}
/**
#include <stdlib.h>
#include <string.h>
+#include "st-settings.h"
#include "st-theme-private.h"
#include "st-theme-context.h"
#include "st-theme-node-private.h"
static const ClutterColor DEFAULT_WARNING_COLOR = { 0xf5, 0x79, 0x3e, 0xff };
static const ClutterColor DEFAULT_ERROR_COLOR = { 0xcc, 0x00, 0x00, 0xff };
-extern gfloat st_slow_down_factor;
-
G_DEFINE_TYPE (StThemeNode, st_theme_node, G_TYPE_OBJECT)
static void
int
st_theme_node_get_transition_duration (StThemeNode *node)
{
+ StSettings *settings;
gdouble value = 0.0;
+ gdouble factor;
g_return_val_if_fail (ST_IS_THEME_NODE (node), 0);
+ settings = st_settings_get ();
+ g_object_get (settings, "slow-down-factor", &factor, NULL);
+
if (node->transition_duration > -1)
- return st_slow_down_factor * node->transition_duration;
+ return factor * node->transition_duration;
st_theme_node_lookup_time (node, "transition-duration", FALSE, &value);
node->transition_duration = (int)value;
- return st_slow_down_factor * node->transition_duration;
+ return factor * node->transition_duration;
}
StIconStyle
static guint signals[LAST_SIGNAL] = { 0, };
-gfloat st_slow_down_factor = 1.0;
-
G_DEFINE_TYPE_WITH_PRIVATE (StWidget, st_widget, CLUTTER_TYPE_ACTOR);
#define ST_WIDGET_PRIVATE(w) ((StWidgetPrivate *)st_widget_get_instance_private (w))
return g_string_free (desc, FALSE);
}
-/**
- * st_set_slow_down_factor:
- * @factor: new slow-down factor
- *
- * Set a global factor applied to all animation durations
- */
-void
-st_set_slow_down_factor (gfloat factor)
-{
- st_slow_down_factor = factor;
-}
-
-/**
- * st_get_slow_down_factor:
- *
- * Returns: the global factor applied to all animation durations
- */
-gfloat
-st_get_slow_down_factor (void)
-{
- return st_slow_down_factor;
-}
-
-
/**
* st_widget_get_label_actor:
* @widget: a #StWidget
/* debug methods */
char *st_describe_actor (ClutterActor *actor);
-void st_set_slow_down_factor (gfloat factor);
-gfloat st_get_slow_down_factor (void);
/* accessibility methods */
void st_widget_set_accessible_role (StWidget *widget,